Data stored on magnetic media, such as hard disk drives, is typically encoded using error correction code so that errors that occur in storage and read back of the data might be detected and corrected. In conventional systems, the read back signal is typically detected by a Viterbi detector that makes bit-by-bit (hard) decisions of the read back signal. The decisions from the Viterbi usually include errors. A post-processor may be used in an attempt to correct the errors before sending them to the error correction code decoder.
However, during post-processing of the Viterbi decisions, the post-processor sometimes makes mis-corrections leading to potentially more errors in the post-processed signal than in the Viterbi detected signal. A decoder applies an error correction routine to the processed signal to retrieve codewords in the signal. If the processed signal contains too many errors, the decoder will decode the sequence to an incorrect codeword, which may result in a retry being initiated. During a retry, the entire process repeats beginning with the Viterbi detector in an attempt to reduce the number of errors generated in the bit decisions so that after post-processing the errors are low enough for the decoder to generate accurate codewords. Each retry is computationally complex and may consume a significant amount of computation time. In addition, during each retry a different set of errors may occur in the Viterbi decisions and post-processed signal resulting in further retries.